docker 启动后有一个需求便是如何处理以及收集它产生的日志。
这里的日志可以分为3类: docker的引擎日志, docker 容器日志, docker 应用日志

docker 引擎日志

这个查找了写文章后总结如下,根据自己对应的系统去查找即可

Ubuntu(14.04) /var/log/upstart/docker.log
Ubuntu(16.04) journalctl -u docker.service
CentOS 7/RHEL 7/Fedora journalctl -u docker.service
CoreOS journalctl -u docker.service
OpenSuSE journalctl -u docker.service
OSX ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log/d‌​ocker.log
Debian GNU/Linux 7 /var/log/daemon.log
Debian GNU/Linux 8 journalctl -u docker.service
Boot2Docker /var/log/docker.log

docker 容器日志

容器的日志 则可以通过 docker logs 命令来访问,而且可以像 tail -f 一样,使用 docker logs -f 来实时查看。如果使用 Docker Compose,则可以通过 docker-compose logs <服务名> 来查看。

如果需要查看容器日志的具体位置可以调用命令:

可以看到这个是一个非常复杂的路径,每次看这个文件是非常不方便的。比较好的解决方案是用一个日志收集器来收集这些日志,比如利用filebeat来收集日志,然后集中到ES中查询。不过需要一些软件安装或者配置。

这里我使用一个比较简单的方案, 利用docker-compose 的logs命令将对应service输出到默认的位置。这样不用担心频繁的up down导致的容器号变化。

nohup docker-compose -f docker-compose-esk.yml logs -f kibana >> /data/game/logs/elk/VM_18_7_centos-kibana.log &

当然,不同机器上的日志可以通过定时rsync命令拉取到同一台机器方便查找。

docker应用日志

由于docker是无状态的,可以通过volums来实现和宿主机的互通。我们可以将docker内应用日志和数据方便地放在宿主机管理,比较简单。可以同时在宿主机上启动一个filebeat将日志发送到内部es机器即可。